/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package manejoDB;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Veko
 */
public class AdministradorDBStock {
   
	
	private ConexionDB abm_consulta;

    
    public AdministradorDBStock() throws SQLException {
        this.abm_consulta = new ConexionDB();
    }
    
    public Integer getNuevoCodigoProd() throws SQLException {
        Integer retorno = null;
        int i=0;
        ResultSet consulta = this.abm_consulta.consulta("Select idstock from stock;");
        while (consulta.next()) {
            i++;
        }
        return i+1;
    }
    
            
    public Boolean Conectar() throws SQLException {
        return this.abm_consulta.conectar();
    }

    public void desconectar() throws SQLException {
        this.abm_consulta.cierraConexion();
    }

    public void setNuevoProducto(String desc, int cantEnStock) throws SQLException {
        this.abm_consulta.insertar("INSERT INTO stock(nombre, cantidad) VALUES ('" + desc + "'," + 
                cantEnStock + ");");
    }

    public ArrayList<Integer> getTodosLosCodigos() throws SQLException {
        ArrayList<Integer> lista=new ArrayList();
        ResultSet consulta = this.abm_consulta.consulta("Select idstock from stock;");
        while (consulta.next()) {
            Integer cod=consulta.getInt("idStock");
            lista.add(cod);
        }
        return lista;
        
    }
  
    public Integer getcant(Integer cod) throws SQLException {
        Integer cant=null;
        ResultSet consulta = this.abm_consulta.consulta("Select cantidad from stock where idStock="+cod+";");
        while (consulta.next()) {
            cant=consulta.getInt("cantidad");
        }
        return cant;
    }


    public void modificarCantEnStock(int cod, Integer cantidad) throws SQLException {
        Integer cant=0;
        cant = this.getcant(cod);
        Integer total=cant+cantidad;
        this.abm_consulta.actualizar("update stock set cantidad="+total+" where idstock="+cod+";");
    }

    public String getNombreProducto(Integer cod) throws SQLException {
        String nombre=null;
        ResultSet consulta = this.abm_consulta.consulta("select nombre from stock where idstock="+cod+";");
        while (consulta.next()) {
            nombre=consulta.getString("nombre");
        }
        return nombre;
    }

    public Double getPrecioxIngresoEntreFechas(String fechaI,String fechaF) throws SQLException {
        Double precio=null;
        ResultSet consulta = this.abm_consulta.consulta("select precioTotal from ingreso where fecha>="+fechaI+" and fecha<="+fechaF+";");
        while (consulta.next()) {
            precio=consulta.getDouble("precioTotal");
        }
        return precio;
    }

/*    public ArrayList<Integer>getEntradas(Integer cod) throws SQLException {
        Integer codEnt=null;
        ArrayList<Integer>lista=new ArrayList();
        ResultSet consulta = this.abm_consulta.consulta("select idingeg from ingresoEgreso where idproducto="+cod+";");
        while (consulta.next()) {
            codEnt=consulta.getInt("idingeg");
            lista.add(codEnt);
        }
        return lista;
    }

    public String getFechaEntrada(Integer cod) throws SQLException {
        String fecha=null;
        ResultSet consulta = this.abm_consulta.consulta("select fecha from ingresoEgreso where idingeg="+cod+";");
        while (consulta.next()) {
            fecha=consulta.getString("fecha");
        }
        return fecha;
    }

    public String getEntSal(Integer cod) throws SQLException {
        String tipoEntrada=null;
        ResultSet consulta = this.abm_consulta.consulta("select inout from ingresoEgreso where idingeg="+cod+";");
        while (consulta.next()) {
            tipoEntrada=consulta.getString("inout");
        }
        return tipoEntrada;
    }

    public Integer getcantEnt(Integer codEnt) throws SQLException {
        Integer cantidad=null;
        ResultSet consulta = this.abm_consulta.consulta("select cantidad from ingresoEgreso where idingeg="+codEnt+";");
        while (consulta.next()) {
            cantidad=consulta.getInt("cantidad");
        }
        return cantidad;
    }
*/
    public Integer setIngresoStock(String fecha, Double precioTotal) throws SQLException {
        Integer id=null;
        this.abm_consulta.insertar("INSERT INTO ingreso(fecha, precioTotal) VALUES ('" + fecha + "'," + 
                precioTotal+" );");
        ResultSet consulta= this.abm_consulta.consulta("Select idIngreso from ingreso");
        while(consulta.next()){
            id=consulta.getInt("idIngreso");
        }
        return id;
    }

    
    public void setIngresoXproducto(Integer codProducto, Integer codIngreso, Double precio, Integer cantidad) throws SQLException, Exception {
        this.abm_consulta.insertar("INSERT INTO ingresoProducto(idProducto, idIngresoStock,precioUnitario,cantidad) VALUES (" + codProducto + "," + 
                codIngreso+","+precio + "," +cantidad+ " );");
        ResultSet consulta=this.abm_consulta.consulta("select cantidad from stock where idstock="+codProducto+";");
        Integer cant=0;
        while(consulta.next()){
            cant=consulta.getInt("cantidad");
        }
        this.abm_consulta.actualizar("UPDATE stock SET cantidad="+(cant+cantidad)+" where idStock="+codProducto+";");
    }
    
    public void setEgreso(Integer codProducto, Integer cantidad, String fecha) throws Exception {
        ResultSet consulta=this.abm_consulta.consulta("select cantidad from stock where idstock="+codProducto+";");
        Integer cant=0;
        while(consulta.next()){
            cant=consulta.getInt("cantidad");
        }
        if(cant<=cantidad){
            throw new Exception("Ha ingresado un valor no válido.\nSupera la cantidad registrada en Stock");
        }
        this.abm_consulta.insertar("INSERT INTO EgresoProducto(idEgreso, idProducto, fecha, cantidad) VALUES (default," + 
                codProducto+",'"+fecha+"',"+cantidad +" );");
        this.abm_consulta.actualizar("UPDATE stock SET cantidad="+(cant-cantidad)+" where idStock="+codProducto+";");
    }

    public void modificarDescripcion(Integer cod, String desc) throws SQLException {
        this.abm_consulta.actualizar("update stock set nombre='"+desc+"' where idstock="+cod+";");
    }

    public ArrayList<String> getListaDescStock() throws SQLException {
        ArrayList<String> retorno = new ArrayList();
        ResultSet consulta=this.abm_consulta.consulta("Select nombre from stock;");
        while(consulta.next()){
            String nombre=consulta.getString("nombre");
            retorno.add(nombre);
        }
        return retorno;
    }

    public Integer getCodProducto(String nombre) throws SQLException {
       Integer retorno=null;
        ResultSet consulta=this.abm_consulta.consulta("Select idStock from stock where nombre='"+nombre+"';");
        while(consulta.next()){
            retorno=consulta.getInt("idStock");
        }
        return retorno;
 
    }

    public ArrayList<Integer> getCodIngresosStock(String fechaI, String fechaF) throws SQLException {
        ArrayList<Integer> retorno=new ArrayList<>();
        ResultSet consulta=this.abm_consulta.consulta("Select idIngreso from ingreso where fecha>='"+fechaI+"' and fecha<='"+fechaF+"';");
        while(consulta.next()){
            Integer cod=consulta.getInt("idIngreso");
            retorno.add(cod);
        }
        return retorno;
 
    }

    public String getFechaIngreso(Integer cod) throws SQLException {
        String fecha=null;
        ResultSet consulta=this.abm_consulta.consulta("Select fecha from ingreso where idIngreso="+cod+";");
        while(consulta.next()){
            fecha=consulta.getString("fecha");
        }
        return fecha; 
    }

    public Double getPrecioxIngreso(Integer cod) throws SQLException {
        Double precio=null;
        ResultSet consulta=this.abm_consulta.consulta("Select preciototal from ingreso where idIngreso="+cod+";");
        while(consulta.next()){
            precio=consulta.getDouble("precioTotal");
        }
        return precio; 
    }

    
    //TODO: usado para validaciones de stock (pregunta si ya exixte ese nombre)
    public boolean consultarNombreTomado(String desc) throws SQLException {
        boolean retorno =false;
        Integer id;
        ResultSet consulta = this.abm_consulta.consulta("Select idStock from stock where upper(nombre)=upper('"+desc+"');");
            while(consulta.next()){
                id=consulta.getInt("idStock");
                if(id!=null){
                    retorno=true;
                }
            }
        return retorno;
    }
    
}
